/*Recherche Model*/
function RechercheModel ($http, $q, localStorageService, cacheService) {

	function Recherche(RechercheData) {
		
		if(RechercheData){
			this.setData(RechercheData);
		}
	};
	Recherche.prototype = {
		setData: function(RechercheData) {
			angular.extend(this, RechercheData);
		},
		retournerLesFiltresAccueil: function () {
			var promise = $http.get("/application/index/filtresrechercheaccueil", this)
				.success(function (data, status, headers, config) {
					return data;
				})
				.error(function (data, status, headers, config) {
					return {"status": false};
				});
		
			return promise;
		},
		// Retourne les filtres pour la recherche lorsque l'on commence à taper ds la zone de recherche		
        retourneFiltresRecherche: function (filtre) {
        	var deferred = $q.defer()

        	var lsFiltre = cacheService.retournerLaClef(filtre);

            if ( lsFiltre != null ) {
                deferred.resolve( lsFiltre );
            } else {
                $http.get("/application/index/filtresrecherche?q=" + filtre).success(function (data) {

                    cacheService.enregistrerLaClef(filtre, data, 10*24*3600);//cache de 10 jours cookies

                    deferred.resolve(data);
                });
            }
            return deferred.promise;
		},
		recherchePageResultats: function (paramsUrl) {
        	var promise = $http.get("/application/resultats/recherche" + paramsUrl )
			.success(function (data, status, headers, config) {
				return data;
			})
			.error(function (data, status, headers, config) {
				return {"status": false};
			});
	
			return promise;
		},



		
		lancerLaRecherche: function () {

			// var lsFiltre = cacheService.retournerLaClef(filtre);

			this.metttreEnCookieLesFiltres();

        	var promise = $http.post("/application/index/lancerlarecherche", this)
				.success(function (data, status, headers, config) {
					return data;
				})
				.error(function (data, status, headers, config) {
					return {"status": false};
				});
		
			return promise;
		},
		metttreEnCookieLesFiltres: function() {
			// var filtres = [];
			// angular.forEach(this, function(value, key) {
				// filtres.push(this);
			// }, filtres);

			var cleRecherche = "recherche";

			cacheService.enregistrerLaClef(cleRecherche, this, 1*24*3600);//cache de 10 jours cookies
		},
		retournerLesFiltresCookie: function() {
			var cleRecherche = "recherche";

			var lsFiltre = cacheService.retournerLaClef(cleRecherche);
			
			return lsFiltre;
		},
		retournerCookieParClef: function( cleRecherche ) {
			var lsFiltre = cacheService.retournerLaClef(cleRecherche);
			
			return lsFiltre;
		},
		miseajourFiltreRecherche: function (ajouterRechercheURLALaSelection) {
			var url = "/application/index/updatefiltresrecherche";

			if(ajouterRechercheURLALaSelection) {
				url = "/application/index/updatefiltresrechercheviaurl";
			}

			var promise = $http.post( url , this)
				.success(function (data, status, headers, config) {
					return data;
				})
				.error(function (data, status, headers, config) {
					return {"status": false};
				});
		
			return promise;
		},
		miseajourFiltreRechercheNoCache: function () {
			var promise = $http.post("/application/index/updatefiltresrecherchenocache", this)
				.success(function (data, status, headers, config) {
					return data;
				})
				.error(function (data, status, headers, config) {
					return {"status": false};
				});
		
			return promise;
		},
		nombreDeSejoursFiltres: function (filteredSejour) {
			var compteurSejour = 0;

	        if(filteredSejour !== null && typeof filteredSejour !== "undefined") {
	            compteurSejour = filteredSejour.length;
	        } else {
	        	return "Commencez par faire une recherche à l'aide des critères de recherche.";
	        }        

	        return compteurSejour > 0 ? compteurSejour + " séjours correspondent à votre recherche" : "aucun séjour ne correspond à votre recherche";
		}
	};
	return Recherche;
}
